package banking;

import banking.domain.OverdraftException;

/**
 * @author: 韩学伟
 * @date: 2024/12/22 21:48
 * @描述:帐户类
 *
 * */
public class Account {
    //a. 声明一个私有对象属性：balance，这个属性保留了银行帐户的当前（或 即时）余额。
    //private double balance;
    //5---a. 修改 Account 类；将 balance 属性的访问方式改为 protected
    protected double balance; //余额
    //b. 声明一个带有一个参数（ init_balance ）的公有构造器 ，这个参数为balance 属性赋值。
    public Account(double init_balance) {
        balance = init_balance;
    }
    //c. 声明一个公有方法 geBalance，该方法用于获取余额。
    /**
     * @描述：查看余额
     * */
    public double getBalance() {
        return balance;
    }
    /**
     * @描述：设置余额
     * @return double
     * */
    public double setBalance(double balance) {
        this.balance = balance;
        return balance;
    }
    //d. 声明一个公有方法 deposit,该方法向当前余额增加金额。

//    public void deposit(double amt) {
//        balance += amt;
//    }
    // 修改 deposit 方法返回 true（意味所有存款是成功的）。
    /**
     * @描述：存款
     * */
    public boolean deposit(double amt) {
        balance += amt;
        return true;
    }
    //e. 声明一个公有方法 withdraw 从当前余额中减去金额。
//    public void withdraw(double amt) {
//        if (balance >= amt) {
//            balance -= amt;
//        }
//    }
    // 修改 withdraw 方法以返回一个布尔值，指示交易是否成功
    // 修改 withdraw 方法来检查提款数目是否大于余额。如果amt小于
    //balance, 则从余额中扣除提款数目并返回 true，否则余额不变返回
    //false。
    /**
     * @描述：取款 方法以返回一个布尔值，指示交易是否成功
     * */
    public boolean withdraw(double amt) {
        if (balance >= amt) {
            balance -= amt;
            return true;
        }
        return false;
    }
    // 重写 withdraw 方法使它不返回值（即 void）.声明方法抛出overdraftException
    //异常
//    public void withdraw(double amt) {
//        if (balance >= amt) {
//            balance -= amt;
//        } else {
//            throw new OverdraftException("Cannot withdraw", amt - balance);
//        }
//        try{
//            if (balance >= amt) {
//                balance -= amt;
//            }
//        }
//    }


}
